home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / C Internet Config / IC Application Source ƒ / C Source ƒ / IC Events.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-02  |  6.5 KB  |  345 lines  |  [TEXT/SPM ]

  1. /*
  2.     IC Events.c
  3.     
  4. */
  5.  
  6. #include <EPPC.h>
  7. #include <AppleEvents.h>
  8.  
  9. #include "IC Globals.h"
  10. #include "IC Document.h"
  11. #include "IC Windows.h"
  12. #include "IC Misc Subs.h"
  13. #include "IC Install.h"
  14. #include "IC Window Globals.h"
  15.  
  16. #include "IC Events.h"
  17.  
  18. void DoDiskEvent(long message){
  19.     Point pt;
  20.     
  21.     if (HiWord(message)!=0){
  22.         pt.h=(qd.screenBits.bounds.right-qd.screenBits.bounds.left-304)/2;
  23.         pt.v=(qd.screenBits.bounds.bottom-qd.screenBits.bounds.top-156)/3;
  24.         InitCursor();
  25.         DIBadMount(pt,message);
  26.     }
  27. }
  28.  
  29. void DoActivateDeactivate(WindowPtr window,Boolean activate){
  30.     if (activate)
  31.         SelectWindow(window);
  32.     WindowActivateDeactivate(window,activate);
  33. }
  34.  
  35. void DoSuspendResume(Boolean resume){
  36.     WindowPtr window=FrontWindow();
  37.     
  38.     in_foreground=resume;
  39.     if (window!=(WindowPtr)0)
  40.         DoActivateDeactivate(window,resume);
  41.     InitCursor();
  42. }
  43.  
  44. void DoUpdate(WindowPtr window,EventRecord* er){
  45.     BeginUpdate(window);
  46.     
  47.     EndUpdate(window);
  48. }
  49.  
  50. void DoKey(EventRecord* er){
  51.     WindowsDoKey(er);
  52. }
  53.  
  54. void DoAutoKey(EventRecord* er){
  55.     DoKey(er);
  56. }
  57.  
  58. void AdjustMenus(void){
  59.     WindowsAdjustMenus();
  60. }
  61.  
  62. void AdjustAllMenus(EventRecord* er){
  63.     MenuHandle mh=GetMenuHandle(M_File);
  64.     Boolean close,save,saveas;
  65.     Str255 tmpstr;
  66.     
  67.     AdjustMenus();
  68.     
  69.     close=(IsDocOpen())||(GetWindowType(FrontWindow())==WT_About);
  70.     save=IsDocDirty()||IsDocNew();
  71.     saveas=IsDocOpen();
  72.     
  73.     if (er->modifiers&&optionKey){
  74.         // set the close menu item to close all
  75.         GetItem(mh,FM_Close,tmpstr);
  76.         if (IUEqualString(tmpstr,"\pClose")==0){
  77.             SetItem(mh,FM_Close,"\pClose All");
  78.         }
  79.     } else {
  80.         // set the close menu item to close
  81.         GetItem(mh,FM_Close,tmpstr);
  82.         if (IUEqualString(tmpstr,"\pClose All")==0){
  83.             SetItem(mh,FM_Close,"\pClose");
  84.         }
  85.     }
  86.     
  87.     SetItemEnable(mh,FM_Close,close);
  88.     SetItemEnable(mh,FM_Save,save);
  89.     SetItemEnable(mh,FM_SaveAs,saveas);
  90.     
  91.     AdjustInstallMenu(M_Install);
  92.     
  93.     mh=GetMenuHandle(M_Windows);
  94.     
  95.     if (IsDocOpen())
  96.         GetDocumentName(tmpstr);
  97.     else
  98.         GetAString(tmpstr,128,15);
  99.     
  100.     SetMenuItemText(mh,1,tmpstr);
  101.     
  102. }
  103.  
  104. void DoIdle(void){
  105.     WindowsIdle();
  106. }
  107.  
  108. void DoMenu(short menu,short item,Boolean option){
  109.     Str255 DAName;
  110.     
  111.     switch (menu){
  112.         case M_Apple:
  113.             switch(item){
  114.                 case 1:
  115.                     DisplayError(acOpenWindow,WindowsOpen(WT_About));
  116.                     break;
  117.                 case 2:
  118.                     break;
  119.                 default:
  120.                     GetMenuItemText(GetMenuHandle(M_Apple),item,DAName);
  121.                     OpenDeskAcc(DAName);
  122.                     break;
  123.             }
  124.             break;
  125.         case M_File:
  126.             switch(item){
  127.                 case FM_New:
  128.                     DisplayError(acNewDocument,DoNewDoc());
  129.                     break;
  130.                 case FM_Open:
  131.                     DisplayError(acOpenDocument,DoSFOpen());
  132.                     break;
  133.                 case FM_OpenInternetPreferences:
  134.                     DisplayError(acOpenDocument,DoOpenInternetPreferences());
  135.                     break;
  136.                 case FM_Close:
  137.                     if (option)
  138.                         DisplayError(acCloseWindow,WindowsCloseAll());
  139.                     else
  140.                         DisplayError(acCloseWindow,DoCloseDocWindow(FrontWindow()));
  141.                     break;
  142.                 case FM_Save:
  143.                     DisplayError(acSave,DoSave());
  144.                     break;
  145.                 case FM_SaveAs:
  146.                     DisplayError(acSave,DoSaveAs());
  147.                     break;
  148.                 case FM_Quit:
  149.                     DisplayError(acQuit,DoQuit());
  150.                     break;
  151.                 default:
  152.                     break;
  153.             }
  154.             break;
  155.         case M_Edit:
  156.             switch(item){
  157.                 case EM_Undo:
  158.                 case EM_Cut:
  159.                 case EM_Copy:
  160.                 case EM_Paste:
  161.                 case EM_Clear:
  162.                 case EM_SelectAll:
  163.                     WindowsDoEditMenu(item);
  164.                     break;
  165.                 default:
  166.                     break;
  167.             }
  168.             break;
  169.         case M_Install:
  170.             DoInstallMenu(menu,item);
  171.             break;
  172.         case M_Windows:
  173.             DisplayError(acOpenWindow,WindowsOpen((WindowType)WT_Main+item-1));
  174.             break;
  175.         default:
  176.             break;
  177.     }
  178.     
  179.     if (!quitnow)
  180.         HiliteMenu(0);
  181. }
  182.  
  183. void DoMainClick(EventRecord* er,WindowPtr wp,short code){
  184.     long mResult;
  185.     Boolean needsselect;
  186.     Rect tempRect;
  187.     
  188.     needsselect=((wp!=(WindowPtr)0)&&(wp!=FrontWindow()));
  189.     
  190.     if ((needsselect)&&(!((code==inDrag)||(code==inContent))))
  191.         SelectWindow(wp);
  192.     
  193.     switch (code){
  194.         case inMenuBar:
  195.             AdjustAllMenus(er);
  196.             mResult=MenuSelect(er->where);
  197.             if (mResult!=0)
  198.                 DoMenu(HiWord(mResult),LoWord(mResult),(er->modifiers&&optionKey));
  199.             if (!quitnow)
  200.                 HiliteMenu(0);
  201.             break;
  202.         case inDrag:
  203.             if ((needsselect)&&((er->modifiers&cmdKey)==0))
  204.                 SelectWindow(wp);
  205.             SetPort(wp);
  206.             {
  207.                 RgnHandle rgn=GetGrayRgn();
  208.                 tempRect=(*rgn)->rgnBBox;
  209.             }
  210.             DragWindow(wp,er->where,&tempRect);
  211.             break;
  212.         case inGrow:
  213.             break;
  214.         case inZoomIn:
  215.         case inZoomOut:
  216.             break;
  217.         case inGoAway:
  218.             if (TrackGoAway(wp,er->where))
  219.                 DisplayError(acCloseWindow,DoCloseDocWindow(wp));
  220.             break;
  221.         case inContent:
  222.             if (needsselect)
  223.                 SelectWindow(wp);
  224.             break;
  225.         case inSysWindow:
  226.             SystemClick(er,wp);
  227.             break;
  228.         default:
  229.             break;
  230.     }
  231. }
  232.  
  233. void DimMenuTitles(void){
  234.     MenuHandle mh;
  235.     long flags;
  236.     short i;
  237.     Boolean old_enable_title,enable_title,menu_bar_redraw;
  238.     
  239.     AdjustMenus();
  240.     // edit
  241.     mh=GetMenuHandle(M_Edit);
  242.     flags=(*mh)->enableFlags;
  243.     old_enable_title=flags&1;
  244.     enable_title=false;
  245.     
  246.     for (i=1;i<=CountMItems(mh);i++){
  247.         if (flags&(1<<i)){
  248.             enable_title=true;
  249.             break;
  250.         }
  251.     }
  252.     SetItemEnable(mh,0,enable_title);
  253.     menu_bar_redraw=(enable_title!=old_enable_title);
  254.     
  255.     // windows
  256.     
  257.     mh=GetMenuHandle(M_Windows);
  258.     flags=(*mh)->enableFlags;
  259.     old_enable_title=flags&1;
  260.     enable_title=IsDocOpen();
  261.     SetItemEnable(mh,0,enable_title);
  262.     menu_bar_redraw |= (enable_title!=old_enable_title);
  263.     
  264.     if (menu_bar_redraw)
  265.         DrawMenuBar();
  266. }
  267.  
  268. void HandleEvents(void){
  269.     EventRecord er;
  270.     short code;
  271.     WindowPtr wp;
  272.     char ch;
  273.     long mResult;
  274.     Boolean b;
  275.     short item;
  276.     
  277.     DimMenuTitles();
  278.     WaitNextEvent(everyEvent,&er,10,(RgnHandle)0);
  279.     
  280.     ch=(char)(er.message&charCodeMask);
  281.     DoIdle();
  282.     b=true;
  283.     
  284.     if (WindowsEarlyHandleEvent(&er))
  285.         b=false;
  286.     
  287.     if ((b)&&((er.what==keyDown)||(er.what==autoKey))){
  288.         if (er.modifiers & cmdKey){
  289.             AdjustAllMenus(&er);
  290.             mResult=MenuKey(ch);
  291.             if (mResult){
  292.                 DoMenu(HiWord(mResult),LoWord(mResult),(er.modifiers&&optionKey));
  293.                 b=false;
  294.             }
  295.         }
  296.         if ((b)&&(WindowsEarlyHandleKey(&er)))
  297.             b=false;
  298.     }
  299.     if ((b)&&(IsDialogEvent(&er))){
  300.         if (DialogSelect(&er,&wp,&item)){
  301.             WindowItemWhere(wp,&er,item);
  302.             b=false;
  303.         }
  304.     }
  305.     
  306.     if (b){
  307.         switch (er.what){
  308.             case mouseDown:
  309.                 code=FindWindow(er.where,&wp);
  310.                 if (wp==(WindowPtr)0)
  311.                     wp=FrontWindow();
  312.                 DoMainClick(&er,wp,code);
  313.                 break;
  314.             case keyDown:
  315.                 DoKey(&er);
  316.                 break;
  317.             case autoKey:
  318.                 DoAutoKey(&er);
  319.                 break;
  320.             case updateEvt:
  321.                 DoUpdate((WindowPtr)er.message,&er);
  322.                 break;
  323.             case activateEvt:
  324.                 DoActivateDeactivate((WindowPtr)er.message,er.modifiers&1);
  325.                 break;
  326.             case kOSEvent:
  327.                 if (er.message&0x01000000){
  328.                     DoSuspendResume(er.message&1);
  329.                 }
  330.                 break;
  331.             case diskEvt:
  332.                 DoDiskEvent(er.message);
  333.                 break;
  334.             case kHighLevelEvent:
  335.                 if (Has_AppleEvents){
  336.                     AEProcessAppleEvent(&er);
  337.                 }
  338.                 break;
  339.             default:
  340.                 break;
  341.         }
  342.     }
  343. }
  344.  
  345.